// 路由鉴权。项目中路由能不能被访问
import router from '@/router/index.ts'
import { RouteLocationNormalized } from 'vue-router'
// 引入进度条及样式
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// 引入token
import setting from '@/setting'

// 白名单，未登录状态可以访问的
const whiteList = ['/login', '/404']

/**
 * 全局前置守卫
 * to：将要访问哪个路由
 * from：从哪个路由而来
 * next：是否放行，next()放行
*/
router.beforeEach((to: RouteLocationNormalized, _from: RouteLocationNormalized, next: any) => {
  document.title = setting.title + '-' + to.meta.title
  nprogress.start()
  
  const login = localStorage.getItem('login') ? JSON.parse(localStorage.getItem('login') as string) : {}

  if(login.token) {
    // 已登录：不能访问登录，如果登录，返回首页
    if(to.path === '/login') {
      next('/')
    } else {
      if(login.userinfo.name) {
        next()
      } else {
        // 为了避免死循环，如果没用户信息就清空token
        localStorage.setItem('login', JSON.stringify({...login, token: ''}))
        next('/login')
      }
    }
  } else {
    // 未登录：除了白名单，其他的都不能登录
    if(whiteList.includes(to.path)) {
      next()
    } else {
      next({path: '/login', query: {redirect: to.path}})
    }
  }
})

// 全局后置守卫
router.afterEach((_to: RouteLocationNormalized, _from: RouteLocationNormalized) => {
  nprogress.done()
})